Redisをグラフィカルに確認できるRedisInsightでElastiCache Redisのメモリ分析してみた
こんにちはコカコーラ大好きカジです。
今日は、Redisの状況をグラフィカルに確認できるRedisInsightをEC2にインストールして、ElasitCache Redisを分析してみました。
前提条件
以下を構築済みであることとします。
- VPC
- ElastiCache
構成図
オンラインとオフライン2つの手法で分析できます。
RedisInsight構築手順
RedisInsight用のEC2 IAM Role作成
RedisInsight-EC2Roleという名前で作成し、以下の2つのマネージドルールをアタッチします
- AmazonS3ReadOnlyAccess
- AmazonElastiCacheReadOnlyAccess
EC2インスタンスを起動
ElastiCacheと同一VPCのインターネットアクセス可能なサブネットにEC2インスタンスを作成します。 詳細な構築方法は省略しますが、以下の設定で構築しています。
項目 | 値 |
---|---|
AMI | Amazon Linux 2 AMI (HVM), SSD Volume Type ami-0053d11f74e9e7f52 |
インスタンスタイプ | t3.medium |
ディスク | 100GB |
EC2 Role | 上記で構築したもの |
セキュリティグループはインバウンドで必要な「My IP」、ポートはをTCP 8001とSSH(TCP 22)を許可します。 また、ElastiCacheのセキュリティグループを修正し、RedisInsight用のEC2のセキュリティグループIDからElastiCacheへインバウンドのアクセスを許可します。
EC2(RedisInsight)で権限と接続確認
EC2 IAM Role確認
SSHでEC2にログインし、RedisInsight用のEC2 IAM Roleが設定できているか確認します。
[ec2-user@ip-10-1-12-165 ~]$ aws s3 ls S3バケットの一覧が表示されることを確認
ElastiCacheとの接続確認
nc (netcat コマンド)をインストール
$ sudo yum install nc
ElastiCacheへ接続テスト
「echo info | nc "redis host" 6379」で接続
$ echo info | nc test.xxxxxx.0001.apne1.cache.amazonaws.com 6379 $3374 # Server redis_version:5.0.6 redis_git_sha1:0 redis_git_dirty:0 redis_build_id:0 redis_mode:standalone os:Amazon ElastiCache arch_bits:64 multiplexing_api:epoll atomicvar_api:atomic-builtin gcc_version:0.0.0 process_id:1 (省略)
(私個人用のメモ) ElastiCacheにテストデータを入れたい場合
redis-cli経由で、DEBUG POPULATEコマンドでテストデータを入れたかったのですが、ElastiCacheはDEBUGコマンドが許可されていません。そのため、redis-benchmarkコマンドを利用しました。
$ sudo amazon-linux-extras install redis4.0 $ sudo yum install redis # redis接続確認 $ redis-cli -h <redis host> > exit # テストデータ投入コマンド $ redis-benchmark -h <redis host> -t set -r 100000 -n 1000000
RedisInsightのインストール
sudo yum update -y sudo yum install -y docker sudo service docker start sudo usermod -a -G docker ec2-user
一度SSHログアウトして再度ログインし、新しいDockerグループの権限を取得します。 確認するには、「docker ps」を実行します。sudoを実行しなくても出力が表示されるはずです。
[ec2-user@ip-10-1-12-165 ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
最後に、ここでRedisInsightをインストールします。
docker run -v redisinsight:/db -p 8001:8001 redislabs/redisinsight:latest
このコマンドは、RedisInsight Dockerイメージをダウンロードして実行し、ポート8001でWebページとして公開します。 EC2インスタンスのPublic IPアドレスを確認して、ブラウザーを起動しアクセスします。
http://<EC2 IP Address>:8001
RedisInsightの[データベース]ページが表示されます。 EULAに同意し、RedisInsightの使用を開始します。
ElastiCacheと接続
ADD REDIS DATABASEをクリックし、Add Databaseをクリックします。
名前と、ElastiCacheのエンドポイント、ポート番号を入力し、ADD REDIS DATABASEをクリックします。 注意:「Automatically Discover Databases」で検索でヒットするものの接続できませんでした。
早速、test(登録したElastiCache)をクリックすると、リアルタイムにコネクションや、メモリ利用率、キーの数が表示されます。
メモリ分析
やっと、分析できるところまできました。
オンライン分析を実行すると、redisの速度が低下する場合があります。続行しますか?でANALYZEを押します。
しばらく待つとMemory OverViewに以下のグラフが出ます。 - データの種類ごとのメモリ分割 - データ型別のキーの数 - 時間の経過とともに解放される可能性が高いメモリ
また、以下の情報がみれます。
Keyspace Summary キースペースの概要が表示されます。
Recommenations(推奨事項)
Memory Analyzer keyのメモリサイズ順に並び替えたり、Filterで検索が行えます。
S3バックアップファイルからのメモリ分析
オフライン分析を実行すると、S3のElastiCacheのスナップショットファイルや、Redisのdumpファイル出力(rdbバックアップファイル)からメモリ分析ができます。
ElastiCache RedisのS3へのスナップショット出力方法は以下のブログとなります。
まず、取得するS3のElastiCacheのスナップショットファイルのオブジェクトURLをコピーします。
Analyze Againクリックし、Offline Analyasisをクリックします。
S3のオブジェクトファイルURLをコピーアンドペーストし、PROCEEDをクリックしてしばらく待ちます。
同じ分析結果が参照できます。
また、手元のRedis 5.0.9で作成したrdbバックアップファイルからも分析できることを確認しました。
オフラインでも確認できるのが便利だと思います。どなたかのお役に立てれば光栄です。
参考元
Installing RedisInsight on AWS EC2 | Redis Labs Documentation Center